using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Drawing;
using System.Data;
using System.Text;
using System.Windows.Forms;
using System.Collections;

namespace eTMS.Controls
{
    public partial class ControlPageDataGridView : UserControl
    {
        public ControlPageDataGridView()
        {
            InitializeComponent();
        }

        private DataTable dt = null;
        public DataSet ds = null;
        public int paging_PageIndex = 1;
        public int paging_NoOfRecPerPage;
        private float pageNumber = 0;
        public eTMS.Controls.DataGridView dgvTemp;
        private enum PagingMode { First = 1, Next = 2, Previous = 3, Last = 4 };

        public void ListItem()
        {
            try
            {
                paging_PageIndex = 1;

                DataTable tmpTable = new DataTable();

                tmpTable = dt.Clone();

                if (dt.Rows.Count >= paging_NoOfRecPerPage)
                {
                    for (int i = 0; i < paging_NoOfRecPerPage; i++)
                    {
                        tmpTable.ImportRow(dt.DefaultView[i].Row);
                    }
                }
                else
                {
                    for (int i = 0; i < dt.DefaultView.Count; i++)
                    {
                        tmpTable.ImportRow(dt.DefaultView[i].Row);
                    }
                }

                dgvTemp.DataSource = tmpTable;
            }
            catch
            {
            }
            if (CustomPagingFinish != null)
            {
                CustomPagingFinish(this, new EventArgs());
            }
        }
        public event EventHandler CustomPagingFinish;
        public void CustomPaging(int mode)
        {
            try
            {
                //There is no need for these variables but i created them just for readability
                if (dt.Rows.Count > 0)
                {
                    int totalRecords = dt.Rows.Count;
                    int pageSize = paging_NoOfRecPerPage;

                    //If total record count is less than  the page size then return.

                    if (totalRecords <= pageSize)
                    {
                        return;
                    }

                    switch (mode)
                    {
                        case (int)PagingMode.Next:
                            if (totalRecords > (paging_PageIndex * pageSize))
                            {
                                DataTable tmpTable = new DataTable();
                                tmpTable = dt.Clone();

                                if (totalRecords >= ((paging_PageIndex * pageSize) + pageSize))
                                {
                                    for (int i = paging_PageIndex * pageSize; i < ((paging_PageIndex * pageSize) + pageSize); i++)
                                    {
                                        tmpTable.ImportRow(dt.Rows[i]);
                                    }
                                }
                                else
                                {
                                    for (int i = paging_PageIndex * pageSize; i < totalRecords; i++)
                                    {
                                        tmpTable.ImportRow(dt.Rows[i]);
                                    }
                                }

                                paging_PageIndex += 1;

                                dgvTemp.DataSource = tmpTable.DefaultView;
                                tmpTable.Dispose();
                            }
                            break;
                        case (int)PagingMode.Previous:
                            if (paging_PageIndex > 1)
                            {
                                DataTable tmpTable = new DataTable();
                                tmpTable = dt.Clone();

                                paging_PageIndex -= 1;

                                for (int i = ((paging_PageIndex * pageSize) - pageSize); i < (paging_PageIndex * pageSize); i++)
                                {
                                    tmpTable.ImportRow(dt.Rows[i]);
                                }

                                dgvTemp.DataSource = tmpTable.DefaultView;
                                tmpTable.Dispose();
                            }
                            break;
                        case (int)PagingMode.First:
                            paging_PageIndex = 2;
                            CustomPaging((int)PagingMode.Previous);
                            break;
                        case (int)PagingMode.Last:
                            paging_PageIndex = (totalRecords / pageSize);
                            CustomPaging((int)PagingMode.Next);
                            break;
                    }
                    DisplayPagingInfo();
                }
            }
            catch
            {
            }
            if (CustomPagingFinish!=null)
            {
                CustomPagingFinish(this, new EventArgs());
            }
        }

        public void DisplayPagingInfo()
        {
            try
            {
                int totalRecords = dt.Rows.Count;
                int pageSize = paging_NoOfRecPerPage;

                pageNumber = (float)totalRecords / pageSize;

                if (pageNumber > (int)pageNumber)
                    pageNumber = (int)(pageNumber) + 1;

                lblStatus.Text = paging_PageIndex.ToString() + "/" + pageNumber.ToString();
            }
            catch
            {
            }
        }

        public DataTable getDataSet
        {
            get
            {
                return dt;
            }

            set
            {
                dt = value;
            }
        }

        public int NumberRecord
        {
            get
            {
                return paging_NoOfRecPerPage;
            }
            set
            {
                paging_NoOfRecPerPage = value;
                tbPageSize.Value = paging_NoOfRecPerPage;
            }
        }

        public eTMS.Controls.DataGridView getDataGridView
        {
            get
            {
                return dgvTemp;
            }
            set
            {
                dgvTemp = value;
            }

        }

        private void btnFillGrid_Click(object sender, EventArgs e)
        {
            if (tbPageSize.Value <= 0)
            {
                MessageBox.Show("Cỡ trang phải lớn hơn 0!", "Lỗi", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                tbPageSize.Focus();
            }
            else
            {
                ListItem();
                DisplayPagingInfo();
            }
        }

        private void dgvTemp_MouseClick(object sender, MouseEventArgs e)
        {

        }

        private void btnFirst_Click(object sender, EventArgs e)
        {
            CustomPaging((int)PagingMode.First);
        }

        private void btnPrevious_Click(object sender, EventArgs e)
        {
            CustomPaging((int)PagingMode.Previous);
        }

        private void btnNext_Click(object sender, EventArgs e)
        {
            CustomPaging((int)PagingMode.Next);
        }

        private void btnLast_Click(object sender, EventArgs e)
        {
            CustomPaging((int)PagingMode.Last);
        }

        private void tbPageSize_KeyPress(object sender, KeyPressEventArgs e)
        {
            if (!Char.IsDigit(e.KeyChar) && !Char.IsControl(e.KeyChar))
            {
                e.Handled = true;
            }
        }

        private void tbPageSize_Enter(object sender, EventArgs e)
        {
            if (tbPageSize.Text.Trim().Equals("0"))
                tbPageSize.Text = "";
        }

        private void tbPageSize_Leave(object sender, EventArgs e)
        {
            if (tbPageSize.Text.Trim().Equals(""))
                tbPageSize.Text = "0";
        }

        public void LockAll(bool IsLocked)
        {
            btnFirst.Enabled = IsLocked;
            btnLast.Enabled = IsLocked;
            btnNext.Enabled = IsLocked;
            btnPrevious.Enabled = IsLocked;
            btnFillGrid.Enabled = IsLocked;
            tbPageSize.Enabled = IsLocked;
        }

        private void tbPageSize_Validated(object sender, EventArgs e)
        {
            paging_NoOfRecPerPage = (int)tbPageSize.Value;
        }
    }
    //public partial class ControlPageDataGridView : UserControl
    //{
    //    public ControlPageDataGridView()
    //    {
    //        InitializeComponent();
    //    }

    //    private DataTable dt = null;
    //    public DataSet ds = null;
    //    private int paging_PageIndex = 1;
    //    public int paging_NoOfRecPerPage;
    //    private float pageNumber = 0;
    //    public DataGridView dgvTemp;
    //    private enum PagingMode { First = 1, Next = 2, Previous = 3, Last = 4 };

    //    public void ListItem()
    //    {
    //        try
    //        {
    //            if (tbPageSize.Text != "")
    //                paging_NoOfRecPerPage = Convert.ToInt32(tbPageSize.Value);

    //            if (paging_NoOfRecPerPage <= 0)
    //            {
    //                paging_NoOfRecPerPage = 1;
    //            }
    //            paging_PageIndex = 1;

    //            DataTable tmpTable = new DataTable();

    //            tmpTable = dt.Clone();

    //            if (dt.Rows.Count >= paging_NoOfRecPerPage)
    //            {
    //                for (int i = 0; i < paging_NoOfRecPerPage; i++)
    //                {
    //                    tmpTable.ImportRow(dt.Rows[i]);
    //                }
    //            }
    //            else
    //            {
    //                for (int i = 0; i < dt.Rows.Count; i++)
    //                {
    //                    tmpTable.ImportRow(dt.Rows[i]);
    //                }
    //            }

    //            dgvTemp.DataSource = tmpTable.DefaultView;
    //        }
    //        catch
    //        {
    //        }

    //    }

    //    public void CustomPaging(int mode)
    //    {
    //        try
    //        {
    //            //There is no need for these variables but i created them just for readability
    //            if (dt.Rows.Count > 0)
    //            {
    //                int totalRecords = dt.Rows.Count;
    //                int pageSize = paging_NoOfRecPerPage;

    //                //If total record count is less than  the page size then return.

    //                if (totalRecords <= pageSize)
    //                {
    //                    return;
    //                }

    //                switch (mode)
    //                {
    //                    case (int)PagingMode.Next:
    //                        if (totalRecords > (paging_PageIndex * pageSize))
    //                        {
    //                            DataTable tmpTable = new DataTable();
    //                            tmpTable = dt.Clone();

    //                            if (totalRecords >= ((paging_PageIndex * pageSize) + pageSize))
    //                            {
    //                                for (int i = paging_PageIndex * pageSize; i < ((paging_PageIndex * pageSize) + pageSize); i++)
    //                                {
    //                                    tmpTable.ImportRow(dt.Rows[i]);
    //                                }
    //                            }
    //                            else
    //                            {
    //                                for (int i = paging_PageIndex * pageSize; i < totalRecords; i++)
    //                                {
    //                                    tmpTable.ImportRow(dt.Rows[i]);
    //                                }
    //                            }

    //                            paging_PageIndex += 1;

    //                            dgvTemp.DataSource = tmpTable.DefaultView;
    //                            tmpTable.Dispose();
    //                        }
    //                        break;
    //                    case (int)PagingMode.Previous:
    //                        if (paging_PageIndex > 1)
    //                        {
    //                            DataTable tmpTable = new DataTable();
    //                            tmpTable = dt.Clone();

    //                            paging_PageIndex -= 1;

    //                            for (int i = ((paging_PageIndex * pageSize) - pageSize); i < (paging_PageIndex * pageSize); i++)
    //                            {
    //                                tmpTable.ImportRow(dt.Rows[i]);
    //                            }

    //                            dgvTemp.DataSource = tmpTable.DefaultView;
    //                            tmpTable.Dispose();
    //                        }
    //                        break;
    //                    case (int)PagingMode.First:
    //                        paging_PageIndex = 2;
    //                        CustomPaging((int)PagingMode.Previous);
    //                        break;
    //                    case (int)PagingMode.Last:
    //                        paging_PageIndex = (totalRecords / pageSize);
    //                        CustomPaging((int)PagingMode.Next);
    //                        break;
    //                }
    //                DisplayPagingInfo();
    //            }
    //        }
    //        catch
    //        {
    //        }
    //    }

    //    public void DisplayPagingInfo()
    //    {
    //        try
    //        {
    //            int totalRecords = dt.Rows.Count;
    //            int pageSize = paging_NoOfRecPerPage;

    //            pageNumber = (float)totalRecords / pageSize;

    //            if (pageNumber > (int)pageNumber)
    //                pageNumber = (int)(pageNumber) + 1;

    //            lblStatus.Text = paging_PageIndex.ToString() + "/" + pageNumber.ToString();
    //        }
    //        catch
    //        {
    //        }
    //    }

    //    public DataTable getDataSet
    //    {
    //        get
    //        {
    //            return dt;
    //        }

    //        set
    //        {
    //            dt = value;
    //        }
    //    }

    //    public int NumberRecord
    //    {
    //        get
    //        {
    //            return paging_NoOfRecPerPage;
    //        }
    //        set
    //        {
    //            paging_NoOfRecPerPage = value;
    //            tbPageSize.Text = paging_NoOfRecPerPage.ToString();
    //        }
    //    }

    //    public DataGridView getDataGridView
    //    {
    //        get
    //        {
    //            return dgvTemp;
    //        }
    //        set
    //        {
    //            dgvTemp = value;
    //        }

    //    }

    //    private void btnFillGrid_Click(object sender, EventArgs e)
    //    {
    //        if (Convert.ToInt32(tbPageSize.Value) <= 0)
    //        {
    //            MessageBox.Show("Cỡ trang phải lớn hơn 0!", "Lỗi", MessageBoxButtons.OK, MessageBoxIcon.Warning);
    //            tbPageSize.Focus();
    //        }
    //        else
    //        {
    //            ListItem();
    //            DisplayPagingInfo();
    //        }
    //    }

    //    private void dgvTemp_MouseClick(object sender, MouseEventArgs e)
    //    {

    //    }

    //    private void btnFirst_Click(object sender, EventArgs e)
    //    {
    //        CustomPaging((int)PagingMode.First);
    //    }

    //    private void btnPrevious_Click(object sender, EventArgs e)
    //    {
    //        CustomPaging((int)PagingMode.Previous);
    //    }

    //    private void btnNext_Click(object sender, EventArgs e)
    //    {
    //        CustomPaging((int)PagingMode.Next);
    //    }

    //    private void btnLast_Click(object sender, EventArgs e)
    //    {
    //        CustomPaging((int)PagingMode.Last);
    //    }

    //    private void tbPageSize_KeyPress(object sender, KeyPressEventArgs e)
    //    {
    //        if (!Char.IsDigit(e.KeyChar) && !Char.IsControl(e.KeyChar))
    //        {
    //            e.Handled = true;
    //        }
    //    }

    //    private void tbPageSize_Enter(object sender, EventArgs e)
    //    {
    //        if (tbPageSize.Text.Trim().Equals("0"))
    //            tbPageSize.Text = "";
    //    }

    //    private void tbPageSize_Leave(object sender, EventArgs e)
    //    {
    //        if (tbPageSize.Text.Trim().Equals(""))
    //            tbPageSize.Text = "0";
    //    }


    //    public void LockAll(bool IsLocked)
    //    {
    //        btnFirst.Enabled = IsLocked;
    //        btnLast.Enabled = IsLocked;
    //        btnNext.Enabled = IsLocked;
    //        btnPrevious.Enabled = IsLocked;
    //        btnFillGrid.Enabled = IsLocked;
    //        tbPageSize.Enabled = IsLocked;
    //    }
    //}
}
